package com.whitehot.klib.base;

import android.app.Application;
import android.content.Context;
import android.support.multidex.MultiDex;

import com.tencent.smtt.sdk.QbSdk;
import com.whitehot.klib.BuildConfig;
import com.whitehot.klib.R;
import com.whitehot.klib.crash.CrashHandler;
import com.whitehot.klib.di.component.AppComponent;
import com.whitehot.klib.di.component.DaggerAppComponent;
import com.whitehot.klib.di.module.AppModule;
import com.whitehot.klib.di.module.ClientModule;
import com.whitehot.klib.di.module.GlobalConfigModule;
import com.whitehot.klib.di.module.ImageModule;
import com.whitehot.klib.integration.ConfigModule;
import com.whitehot.klib.integration.ManifestParser;
import com.whitehot.klib.utils.LogUtil;
import com.whitehot.klib.utils.Utils;

import java.util.List;

/**
 * Created by ytf on 2018/6/15.
 * Description:
 */
public class XKApp extends Application implements IApp
{

    private Application mApplication;
    private AppComponent mAppComponent;
    private List<ConfigModule> mModules;

    @Override
    protected void attachBaseContext(Context base)
    {
        super.attachBaseContext(base);
        MultiDex.install(this);
        mApplication = this;
        this.mModules = new ManifestParser(mApplication).parse();
    }

    @Override
    public void onCreate()
    {
        super.onCreate();
        mAppComponent = DaggerAppComponent
                .builder()
                .appModule(new AppModule(mApplication))////提供application
                .clientModule(new ClientModule())//用于提供okhttp和retrofit的单例
                .imageModule(new ImageModule())//图片加载框架默认使用glide
                .globalConfigModule(getGlobalConfigModule(mApplication, mModules))//全局配置
                .build();
        mAppComponent.inject(this);
        Utils.initAppComponent(mAppComponent);

        initX5Web();

        Utils.init(this);
        CrashHandler.getInstance().init(this, "");
        LogUtil.init(BuildConfig.DEBUG);
    }

    private void initX5Web()
    {
        //x5内核初始化接口
        QbSdk.initX5Environment(mApplication, new QbSdk.PreInitCallback()
        {

            @Override
            public void onViewInitFinished(boolean arg0)
            {
                //x5內核初始化完成的回调，为true表示x5内核加载成功，否则表示x5内核加载失败，会自动切换到系统内核。
            }

            @Override
            public void onCoreInitFinished()
            {
            }
        });
    }

    @Override
    public AppComponent getAppComponent()
    {
        return mAppComponent;
    }

    /**
     * 将app的全局配置信息封装进module(使用Dagger注入到需要配置信息的地方)
     * 需要在AndroidManifest中声明{@link ConfigModule}的实现类,和Glide的配置方式相似
     */
    private GlobalConfigModule getGlobalConfigModule(Application context, List<ConfigModule> modules)
    {
        GlobalConfigModule.Builder builder = GlobalConfigModule
                .builder()
                .baseurl("https://api.github.com")//为了防止用户没有通过GlobeConfigModule配置baseurl,而导致报错,所以提前配置个默认baseurl
                .statusBarColor(R.color.colorPrimary)   //提供一个默认的状态栏颜色
                .statusBarAlpha(0);
        if(modules != null && modules.size() != 0)
        {
            for (ConfigModule module : modules)
            {
                module.applyOptions(context, builder);
            }
        }

        return builder.build();
    }
}
